package com.ssrs.framework.util;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
* @Description: 数据装换
* @Author: ssrs
* @CreateDate: 2020/10/18 10:27
* @UpdateUser: ssrs
* @UpdateDate: 2020/10/18 10:27
* @Version: 1.0
*/
public class DataConvertUtil {

	/**
	 * @todo 返回两个数组的交集
	 * @param array1（大）
	 * @param array2（小）
	 * @return List<String>
	 */
	public static List<String> listIntersection(Object[] array1, Object[] array2) {
		List<String> list = Arrays.stream(array1).map(p -> p.toString()).collect(Collectors.toList());
		return Arrays.stream(array2).map(i -> i.toString()).filter(i -> list.contains(i)).collect(Collectors.toList());
	}

	/**
	 * list内元素非Object
	 * 返回两个集合的交集
	 * 
	 * @param list1（大）
	 * @param list2（小）
	 * @return
	 */
	public static List<Object> listIntersection(List<Object> list1, List<Object> list2) {
		return list2.stream().filter(i -> list1.contains(i)).collect(Collectors.toList());
	}

	/**
	 * list内元素非Object
	 * 返回两个集合的交集
	 *
	 * @param list1（大）
	 * @param list2（小）
	 * @return
	 */
	public static List<Long> longListIntersection(List<Long> list1, List<Long> list2) {
		return list2.stream().filter(i -> list1.contains(i)).collect(Collectors.toList());
	}

	/**
	 * @todo Object array转Long list
	 * @param array
	 * @return List<Long>
	 */
	public static List<Long> arryToLongList(Object[] array) {
		return Arrays.stream(array).map(p -> Long.valueOf(p.toString())).collect(Collectors.toList());
	}

	/**
	 * @todo Object array转String list
	 * @param array
	 * @return List<Long>
	 */
	public static List<String> arryToStringList(Object[] array) {
		return Arrays.stream(array).map(p -> p.toString()).collect(Collectors.toList());
	}

	/**
	 * @todo Object array转不重复Long list
	 * @param array
	 * @return List<Long>
	 */
	public static List<Long> arryToLongUniqueList(Object[] array) {
		return CollUtil.distinct(Arrays.stream(array).map(p -> Long.valueOf(p.toString())).collect(Collectors.toSet()));
	}

	/**
	 * @todo Object array转不重复Long list
	 * @param array
	 * @return List<Long>
	 */
	public static List<Long> arryToLongUniqueList(String[] array) {
		if (array.length == 0) {
			return new ArrayList<Long>();
		}

		return CollUtil.distinct(
				Arrays.stream(array).map(p -> Long.parseLong(p.trim())).filter(s -> s != 0).collect(Collectors.toSet()));
	}

	/**
	 * @todo Object array转不重复Long list
	 * @return List<Long>
	 */
	public static List<Long> arryToLongUniqueList(String idsStr) {
		String[] array = StrUtil.isEmpty(idsStr) ? new String[] {} : idsStr.split(",");
		return arryToLongUniqueList(array);
	}

	/**
	 * @todo Object array转不重复String list
	 * @param array
	 * @return List<Long>
	 */
	public static List<String> arryToStringUniqueList(Object[] array) {
		return CollUtil.distinct(Arrays.stream(array).map(p -> p.toString()).collect(Collectors.toSet()));
	}
}
